iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

group by

group by功能有點受限,使用於group by的條件只能是primary key。

當然,aggregation function也有,搭配GROUP BY一起使用。

SELECT weatherstation_id, date, MAX(temperature) FROM temperature_by_day 
GROUP BY weatherstation_id, date, event_time;

limit

limit 可以與ALLOW FILTERING一起使用,ALLOW FILTERING可以透過limit的限制,改善查詢時間。

撈出的預設筆數

limit的查詢條件,除了在cqlsh裡面有預設限制撈出10,000筆資料,在CASSANDRA/SCYLLA並沒有預設撈出筆數的限制。

有趣的一點,雖然沒有預設撈出的最大筆數,但也不是無限制的撈取資料,會有一個撈取資料timeout的設定值,避免是因為下錯語法,導致系統不穩定。

撈取順序與RDBMS的limit一樣,假設指定limit 200,意即撈出前200筆資料返回。

以系統全部/ partition 為範圍的limit

在CASSANDRA/SCYLLA,如果單單指下limit,那麼搜尋的範圍是全部的資料(all partition),從中挑選出指定的筆數。

除此之外,還有另一種PER PARTITION LIMIT,亦即從每個partition撈出指定的筆數,這點是RDBMS所沒有的。

如以下引用官方的範例:

cqlsh:ks1> SELECT client_id, when FROM ks1.test LIMIT 3;

client_id | when
-----------+---------------------------------
       1 | 2019-12-31 22:00:00.000000+0000
       1 | 2020-01-01 22:00:00.000000+0000
       2 | 2020-02-10 22:00:00.000000+0000

(3 rows)

cqlsh:ks1> SELECT client_id, when FROM ks1.test PER PARTITION LIMIT 1;

client_id | when
-----------+---------------------------------
       1 | 2019-12-31 22:00:00.000000+0000
       2 | 2020-02-10 22:00:00.000000+0000
       4 | 2020-02-10 22:00:00.000000+0000
       3 | 2020-02-10 22:00:00.000000+0000

(4 rows)

甚至,兩種limit可以結合一起使用

cqlsh> SELECT client_id, when FROM ks1.test PER PARTITION LIMIT 1 LIMIT 3;

client_id | when
-----------+---------------------------------
       1 | 2019-12-31 22:00:00.000000+0000
       2 | 2020-02-10 22:00:00.000000+0000
       4 | 2020-02-10 22:00:00.000000+0000

(3 rows)


以上是關於limit的介紹,不過新手如筆者,暫且不太能想像PER PARTITION LIMIT的使用情境。

若有什麼好想法也可以留言給筆者喔。



上一篇
Day13. 排序
下一篇
Day15. where in / like
系列文
scylla 從零開始攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言